package basketball_behaviour

import (
	"encoding/json"
	"longmen/server/config/global"
	"longmen/server/internal/services/nami/services/sports/basketball"
	"longmen/server/pkg/db/mysql/models/models_sports"
)

type (
	MatchApiResponse struct {
		Code  int `json:"code"`
		Query struct {
			Total int    `json:"total"` // 返回数据总量
			Type  string `json:"type"`  // 		查询类型，日期查询：diary、赛事查询：competition、赛季查询：season、体彩查询：lottery
		} `json:"query"`
		Results struct {
			Match []Match `json:"match"`
			//Competition []struct {
			//	ID   int    `json:"id"`
			//	Name string `json:"name"`
			//	Logo string `json:"logo"`
			//} `json:"competition"`
			//Team []struct {
			//	ID   int    `json:"id"`
			//	Name string `json:"name"`
			//	Logo string `json:"logo"`
			//} `json:"team"`
		} `json:"results"`
	}
	Scores     []int
	OverScores [][]int
	Match      struct {
		ID            int    `json:"id"`             // 比赛id
		CompetitionID int    `json:"competition_id"` // 赛事id
		HomeTeamID    int    `json:"home_team_id"`   // 主队id
		AwayTeamID    int    `json:"away_team_id"`   // 客队id
		Kind          int    `json:"kind"`           // 类型id，1-常规赛、2-季后赛、3-季前赛、4-全明星、5-杯赛、6-附加赛、0-无
		PeriodCount   int    `json:"period_count"`   // 比赛总节数(不包含加时)
		StatusID      uint32 `json:"status_id"`      // 比赛状态，详见状态码->比赛状态
		MatchTime     int64  `json:"match_time"`     // 比赛时间
		Neutral       int    `json:"neutral"`        // 是否中立场，1-是、0-否s
		//比分字段说明
		//example：[0, 0, 0, 0, 0]
		//	Enum:
		//		Array[5]
		//		0:"第1节分数 - int"
		//		1:"第2节分数 - int"
		//		2:"第3节分数 - int"
		//		3:"第4节分数 - int"
		//		4:"加时分数 - int"
		HomeScores Scores `json:"home_scores"` // 比分
		//加时赛比分字段说明（大于1个加时才有该字段，每一位为1节加时比分）
		//example：[[8, 9, 6], [8, 9, 8]]
		//	Enum:
		//		Array[2]
		//			0:Array[3]
		//			0:"主队第1节加时分数 - int"
		//			1:"主队第2节加时分数 - int"
		//			2:"主队第n节加时分数 - int"
		//		1:Array[3]
		//			0:"客队第1节加时分数 - int"
		//			1:"客队第2节加时分数 - int"
		//			2:"客队第n节加时分数 - int"
		AwayScores Scores `json:"away_scores"` // 比分
		//加时赛比分字段说明（大于1个加时才有该字段，每一位为1节加时比分）
		//example：[[8, 9, 6], [8, 9, 8]]
		//Enum:
		//	Array[2]
		//	0:Array[3]
		//		0:"主队第1节加时分数 - int"
		//		1:"主队第2节加时分数 - int"
		//		2:"主队第n节加时分数 - int"
		//	1:Array[3]
		//		0:"客队第1节加时分数 - int"
		//		1:"客队第2节加时分数 - int"
		//		2:"客队第n节加时分数 - int"
		OverTimeScores OverScores `json:"over_time_scores"` // 加时赛比分
		HomePosition   string     `json:"home_position"`    // 主队排名
		AwayPosition   string     `json:"away_position"`    // 客队排名
		Coverage       struct {
			Mlive        int `json:"mlive"`        // 是否有动画，1-是、0-否
			Intelligence int `json:"intelligence"` // 是否有情报，1-是、0-否
		} `json:"coverage"`
		VenueID  int `json:"venue_id"`  // 场馆id
		SeasonID int `json:"season_id"` // 赛季id
		Round    struct {
			StageID  int `json:"stage_id"`  // 阶段id
			GroupNum int `json:"group_num"` // 第几组，1-A、2-B以此类推
			RoundNum int `json:"round_num"` // 第几轮
		} `json:"round"`
		UpdatedAt int `json:"updated_at"` // 更新时间
	}
)

func (r MatchApiResponse) Interface() []basketball.InsertMatchInterface {
	a := make([]basketball.InsertMatchInterface, 0)
	for _, record := range r.Results.Match {
		a = append(a, record)
	}
	global.Log.Info("count : ", len(r.Results.Match))
	return a
}

func (c Match) Get() models_sports.BasketballMatch {
	return models_sports.BasketballMatch{
		ID:             c.ID,
		CompetitionID:  c.CompetitionID,
		HomeTeamID:     c.HomeTeamID,
		AwayTeamID:     c.AwayTeamID,
		Kind:           c.Kind,
		PeriodCount:    c.PeriodCount,
		StatusID:       models_sports.BasketBallMatchStatus(c.StatusID),
		MatchTime:      c.MatchTime,
		Neutral:        c.Neutral,
		HomeScores:     c.HomeScores.String(),
		AwayScores:     c.AwayScores.String(),
		OverTimeScores: c.OverTimeScores.String(),
		HomePosition:   c.HomePosition,
		AwayPosition:   c.AwayPosition,
		Mlive:          c.Coverage.Mlive,
		Intelligence:   c.Coverage.Intelligence,
		VenueID:        c.VenueID,
		SeasonID:       c.SeasonID,
		StageID:        c.Round.StageID,
		GroupNum:       c.Round.GroupNum,
		RoundNum:       c.Round.RoundNum,
		UpdatedAt:      c.UpdatedAt,
	}
}

func (s Scores) String() string {
	marshal, _ := json.Marshal(s)
	return string(marshal)
}

func (s OverScores) String() string {
	marshal, _ := json.Marshal(s)
	return string(marshal)
}
